<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    //当你在普通函数调用前面加上new关键字之后 就会把这个函数调用变成一个构造函数
    //实际上 new会劫持所有普通函数并用构造对象的形式来调用它
    function Foo(){
        console.log(' Don’t mind me  ');
    }
    //声明function Foo()时 Foo会有一个.prototype关联到默认的对象，
    console.log("Foo.prototype" + Foo.prototype)
    var a = Foo();//a1的内部prototype会关联到Foo.prototype上

    function foo(){

    }
    foo.prototype = {} //创建一个新原型对象
    var a1 = new Foo()
    //a1.constructor通过默认的Prototype委托
    a1.constructor === foo; //false
    a1.constructor === Object;//true
     
     //需要在foo.prototype上“修复”丢失的.constructor属性
     //新对象属性起到foo.prototype的作用
     Object.defineProperty(
         foo.prototype,
         'constructor',
         {
             enumerable:false,
             writable:true,
             configurable:true,
             value:foo //让.constructor指向foo
         }
     )
    function Bar(){

    }
    //ES6直接修改现有的Bar.prototype
    Object.setPrototypeOf(Bar.prototype,Foo.prototype)

</script>
</html>